package com.william.jdbcplus.core.toolkit;

import java.util.*;

/**
 * Collections工具集.
 *
 * @author NiLiwei
 * @version 2016-07-01
 */
@SuppressWarnings("rawtypes")
public class CollectionUtils {


    /**
     * 数组转集合
     *
     * @param arr
     * @return
     */
    public static <E> Set<E> arrayToSet(E[] arr) {
        Set<E> set = new HashSet<E>();
        for (E obj : arr) {
            set.add(obj);
        }

        return set;
    }


    /**
     * 数组转列表
     *
     * @param arr
     * @return
     */
    public static <E> List<E> arrayToList(E[] arr) {
        List<E> set = new ArrayList<E>();
        for (E obj : arr) {
            set.add(obj);
        }

        return set;
    }

    /**
     * 集合转Set
     *
     * @param collection
     * @return
     */
    public static <E> Set<E> toSet(Collection<E> collection) {
        Set<E> set = new HashSet<E>();
        for (E obj : collection) {
            set.add(obj);
        }

        return set;
    }

    /**
     * 集合转List
     *
     * @param collection
     * @return
     */
    public static <E> List<E> toList(Collection<E> collection) {
        List<E> list = new ArrayList<E>();
        for (E obj : collection) {
            list.add(obj);
        }

        return list;
    }

    public static List<Object> toListObj(Collection<?> collection) {
        List<Object> list = new ArrayList<Object>();
        for (Object obj : collection) {
            list.add(obj);
        }

        return list;
    }


    /**
     * 判断是否为空.
     */
    public static boolean isEmpty(Collection collection) {
        return (collection == null || collection.isEmpty());
    }


    /**
     * 获取Collection的最后一个元素 ，如果collection为空返回null.
     */
    public static <T> T getLast(Collection<T> collection) {
        if (isEmpty(collection)) {
            return null;
        }

        // 当类型为List时，直接取得最后一个元素 。
        if (collection instanceof List) {
            List<T> list = (List<T>) collection;
            return list.get(list.size() - 1);
        }

        // 其他类型通过iterator滚动到最后一个元素.
        Iterator<T> iterator = collection.iterator();
        while (true) {
            T current = iterator.next();
            if (!iterator.hasNext()) {
                return current;
            }
        }
    }

    public static boolean isNotEmpty(Map map) {
        return !isEmpty(map);
    }

    public static boolean isNotEmpty(Collection coll) {
        return !isEmpty(coll);
    }

    public static boolean isEmpty(Map map) {
        return map == null || map.isEmpty();
    }

}
